﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Persistencia;
using Persistencia.Contexto;
using GestorDeFlotasModelo.Factorias;
using GestorDeFlotasModelo.Entities;
using GestorDeFlotasDesktop.UILogic;
using GestorDeFlotasDesktop.UILogic.Helpers;

namespace GestorDeFlotasDesktop.Login
{
    public partial class frmLogin : BaseForm
    {
        private Usuario usuario;

        public frmLogin()
        {      
            InitializeComponent();
        }

        private void btnLogin_Click(object sender, EventArgs e)
        {
            try
            {
                string error = string.Empty;
                if (string.IsNullOrEmpty(txtUserName.Text))
                    error += "Debe completar el campo user name " + Environment.NewLine;
                if (string.IsNullOrEmpty(txtPassword.Text))
                    error += "Debe completar el campo password " + Environment.NewLine;


                if (string.IsNullOrEmpty(error))
                {
                    this.usuario = Transaccion.Factoria<FactoriaUsuario>().SelectUsuario(this.txtUserName.Text);
                    if (usuario != null && usuario.Password.ToUpper() == SecurityHelpers.PasswordHashed(txtPassword.Text) && usuario.Habilitado)
                    {
                        usuario.IntentosFallidos = 0;
                        this.Hide();
                        Contexto.Usuario = usuario;
                        new frmMenu().Show();

                        Transaccion.Persistir();
                        return;
                    }
                    else if (usuario == null) // si no existe el usuario
                    {
                        error = "Usuario o contraseña incorrecta. Por favor revise los datos";
                    }
                    else if (!usuario.Habilitado)
                    {
                        error = "Su usuario se encuentra inhabilitado. Por favor comuníquese con un administrador";
                    }
                    else if (usuario != null && usuario.Password != SecurityHelpers.PasswordHashed(txtPassword.Text)) // si existe el usuario pero no puso bien el pass
                    {
                        //Si le pifió a los datos 3 veces se inhabilita el usuario.
                        usuario.IntentosFallidos++;
                        bool puedeSeguir = usuario.PuedeSeguirLogueandose;
                        if (!puedeSeguir)
                        {
                            error = "Su usuario se encuentra inhabilitado. Por favor comuníquese con un administrador";
                            usuario.Habilitado = false;
                        }
                        else
                            error = string.Format("Contraseña incorrecta para el usuario: {0}. Intentos restantes: {1}",
                                txtUserName.Text, (3 - usuario.IntentosFallidos));
                        Transaccion.Persistir();
                    }


                }

                MessageBox.Show(error, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void frmLogin_Load(object sender, EventArgs e)
        {

        }
    }
}
